<template>
  <div class="loginage">
    <div class="content">
      <h2>商城App后台管理系统</h2>
      <!-- 引用element的组件 -->
      <el-form :model="loginObj" :rules="loginRules" ref="ruleFormRef">
        <el-form-item label="UserName" class="item_label" prop="uname">
          <el-input placeholder="请输入邮箱/手机号码登录" class="item_input" v-model.lazy.trim="loginObj.uname"/>
        </el-form-item>
        <el-form-item label="PassWord" class="item_label" prop="upwd">
          <el-input placeholder="请输入登录密码" show-password class="item_input" v-model.lazy.trim="loginObj.upwd"/>
        </el-form-item>
        <el-form-item prop="isAgreen">
          <el-checkbox v-model="loginObj.isAgreen">已阅读并同意《服务条款》</el-checkbox>
        </el-form-item>
        <el-form-item> 
          <el-button color="darkcyan" @click="onLogin(ruleFormRef)">登录</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script setup>
import router from "../../router";
import {ElMessage} from "element-plus"
import{md5} from 'js-md5'
import { reactive,ref } from "vue";
import $axios from "../../utils/request"
// import { useRouter } from "vue-router";

// const $axios = inject('$axios')
// const router = useRouter()
// 组件创建完成后，自动捕获表单的DOM对象
const ruleFormRef=ref('');

// 表单数据绑定对象
let loginObj = reactive({
  uname:'',
  upwd:'',
  isAgreen:'',
})

const RuleArgeen = (rule,value,callback)=>{
  if(!value){
    callback(new Error('必须勾选该项'))
  }else{
    callback()
  }
}

// 验证规则对象
const loginRules = reactive({
  uname:[
    {required:true,message:'必须填写登录账号！',trigger:'blur'}
  ],
  upwd:[
    {required:true,message:'必须填写登录密码！',trigger:'blur'}
  ],
  isAgreen:[
    // 自定义验证规则，那么必须保证自定义验证函数在规则对象之前创建
    {validator:RuleArgeen,trigger:'change'}
  ]
})

// 提交表单
const onLogin=(formEl)=>{
  // 提取rules的验证规则结果
  // vue2写法 this.$refs[formEl].validate((val)=>{
  formEl.validate((val)=>{
    // val为true，表示所有的rules验证都通过
      if(val){
           let data={
            username:loginObj.uname,
            password:md5(loginObj.upwd)
           }
           $axios.post('/login',data).then((res)=>{
            if(res.code === '200'){
                router.push('/admin/index');
                sessionStorage.setItem('user',JSON.stringify(res.data))
            }else{
                ElMessage.error(res.msg)
            }
            
           }).catch((error)=>{
            if (error.response == undefined || error.response.data == undefined) {
                    ElMessage.error(error)
               }else{
                ElMessage.error(error.response.data);
               }
            })
           
        }else{
            //val为false，表示有一个以上的验证不通过
           ElMessage.error('登录失败,请重新登录');
           
           return false;
        }
  })
}
</script>

<style scoped>
.loginage{
  width: 100%;
  height: 100vh;
  overflow: hidden;
  background-color: #2a2a33;
  position: relative;
}
.loginage .content{
  width: 400px;
  background-color: rgba(255, 255, 255, 0.8);
  box-shadow: 0px 0px 8px white;
  border-radius: 10px;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%,-50%);
}
.loginage .content h2{
  color: #008b8b;
  line-height: 80px;
  text-align: center;
  font-size: 24px;
  font-family: "黑体";
}
/* 当使用第三方UI框架时需要修改样式的情况，观察浏览器的最终组件效果 */
/* 情况1：结构比较简单，组件直接生成对应的标签，如el-form直接生成form标签的情况，可以直接针对标签进行样式修改 */
.loginage .content form{
  width: 90%;
  margin: 0 auto;
}
.loginage .content button{
  width: 100%;
}
/* :deep():穿刺（存在兼容性问题，移动端不显示 */
.loginage .content :deep(button>span){
  color: white !important;
}
/* 情况1：结构比较复杂，组件生成多层结构，如el-form-item */
.loginage .content .item_label{
  font-weight: 600;
}
.loginage .content .item_input{
  border: 1px solid gray;
  border-radius: 6px;
  line-height: 40px;
  overflow: hidden;
}
</style>